package cn.wlinker.video.monitor.service;

import cn.hutool.core.lang.tree.Tree;
import cn.hutool.json.JSONObject;
import cn.wlinker.video.monitor.domain.Page;
import cn.wlinker.video.monitor.domain.PageQuery;
import cn.wlinker.video.monitor.domain.dto.*;
import cn.wlinker.video.monitor.domain.vo.MonitorDeviceVO;
import cn.wlinker.video.monitor.domain.vo.PictureUrlVO;
import cn.wlinker.video.monitor.domain.vo.PresetAddVO;
import cn.wlinker.video.monitor.domain.vo.VideoVO;

import java.util.List;

/**
 * 各家平台的视频云服务接口：<br/>
 * <li>海康卫视（HikVision）：直接取流、综合安防平台、萤石云</li>
 * <li>大华（dahua）：直接取流、乐橙云</li>
 * @author gxsjx
 * @version 1.0
 * @date 2022/7/25
 */
public interface ICommonVideoService {

    /**
     * 获取回放流地址
     * @param playUrlDTO
     * @return
     */
    VideoVO getRelayUrl(PlayUrlDTO playUrlDTO);

    /**
     * 根据设备序列号查询设备能力集
     * @param id
     * @return
     */
    JSONObject capacity(String id);

    /**
     * 添加预置点
     * @param presetDTO
     * @return
     */
    PresetAddVO presetAdd(PresetDTO presetDTO);

    /**
     * 调用预置点
     * @param presetDTO
     * @return
     */
    Boolean presetMove(PresetDTO presetDTO);

    /**
     * 清除预置点
     * @param presetDTO
     * @return
     */
    Boolean presetClear(PresetDTO presetDTO);

    /**
     * 图片抓拍
     *
     * @param captureDTO
     * @return
     */
    PictureUrlVO capture(CaptureDTO captureDTO);

    /**
     * 开始云台转动
     *
     * @param ptzControlDTO
     * @return
     */
    Boolean ptzStart(PtzControlDTO ptzControlDTO);

    /**
     * 停止云台转动
     *
     * @param ptzControlDTO
     * @return
     */
    Boolean ptzStop(PtzControlDTO ptzControlDTO);

    /**
     * 获取视频播放url
     * @param playUrlDTO
     * @return
     */
    VideoVO getUrl(PlayUrlDTO playUrlDTO);


    /**
     * 获取视频播放列表
     * @param ids
     * @param playUrlDTO
     * @return
     */
    List<VideoVO> getUrls(List<String> ids,PlayUrlDTO playUrlDTO);

    /**
     * 获取摄像头列表
     * @param monitorDeviceDTO
     * @param pageQuery
     * @return
     */
    Page<MonitorDeviceVO> getMonitorDeviceList(MonitorDeviceDTO monitorDeviceDTO, PageQuery pageQuery);

    /**
     * 获取网络设备树
     * @param monitorType
     * @return
     */
    List<Tree<String>> getNetDeviceTree(String monitorType);
}